
const fs =require('fs');
const path =require('path');
const http =require('http');
const url =require('url');
const getHostName =function(str){
    let{ hostname }= url.parse(str);
    return hostname;
};

http.createServer((req, res)=>{
    let refer = req.headers['referer']|| req.headers['referrer'];// 请求头都是小写的
// 先看一下refer的值，去和host的值作对比，不相等就需要防盗链了
// 要读取文件 返回给客户端
    let{ pathname }= url.parse(req.url);
    // console.log(
    //     `__dirname:${__dirname}`,
    //     `pathname:${pathname}`
    // )
    let src = path.join(__dirname,'public','.'+ pathname);
// src代表我要找的文件

    // console.log(
    //     `refer: ${refer}`,
    //     `src: ${src}`,
    //     `pathname: ${pathname}`
    // )
    fs.stat(src, (err, stats) =>{// 先判断文件存不存在
        if(!err){
            if(refer){// 不是所有图片都有来源
                let referHost = getHostName(refer);
                let host = req.headers['host'].split(':')[0];

                // console.log(
                //     `referHost: ${referHost}`,
                //     `host: ${host}`
                // )

                if(referHost !== host){
// 防盗链
                    console.log(`************referHost !== host****************`)
                    console.log(
                        `referHost: ${referHost}`,
                        `host: ${host}`
                    )
                    fs.createReadStream(path.join(__dirname,'public','./2.jpg')).pipe(res);
                }else{
// 正常显示，如果路径存在，可以正常显示直接返回
                    console.log(`**************referHost === host**************`)
                    console.log(`imgUrl: ${src}`)
                    fs.createReadStream(src).pipe(res);
                }
            }else{
// 正常显示，如果路径存在，可以正常显示直接返回
                fs.createReadStream(src).pipe(res);
            }
        }else{
            console.log(err)
            res.end(`${JSON.stringify(err)}`);
        }
    });

}).listen(8888);
